// 接口

/* 
在TypeScript中, 我们使用接口(InterFaces)来定义对象的类型
接口：是对象的状态(属性)和行为(方法)的抽象(描述)
接口:是一种类型，是一种规范，是一种规则，是一种能力，是一种约束
接口类型的对象
    多了或者少了属性是不允许的
    可选属性:?
    只读属性:readonly



*/

/* 

需求:创建人的对象，需要对人的属性进行一定的约束

id是number类型,必须有,只读的
name 是string类型，必须有
age 是 number类型，必须有 
sex shi string类型，可以没有


*/

;(() => {
  // 定义一个接口，该接口作为person对象的类型使用,限定或者是约束该对象的属性数据
  // readonly vs const 最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。做为变量使用的话用const，若做为属性则使用readonly
  interface IPerson {
    readonly id: number // id是只读的，是number类型
    name: string
    age: number
    sex?: string // sex这个属性可以没有
  }

  // 定义一个对象，该对象的类型就是我定义的接口IPerson
  const person: IPerson = {
    id: 1,
    name: '小甜甜',
    age: 18,
    sex: '女',
  }
})()
